package ThreadDemo.ThreadDemo2;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:周次煜
 * Date: 2024-07-16
 * Time：22:26
 */
public class JoinDemo2 {

    /**
     * 多个线程之间的线程等待
     *  在哪个线程的 作用域中调用哪个，那个线程对等待 调用 join 的那个对象
     *
     *  在哪个作用域中执行， 哪个处于阻塞状态 ，
     *  哪个对象调用， 就优先执行哪个对象。
     *
     *
     * @param args
     * @throws InterruptedException
     *
     *
     */


    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(()-> {

            for (int i = 0; i < 3; i++) {
                System.out.println("t1正在执行...");
            }
        });

        Thread t2 = new Thread(()-> {
//            如果在 t2 的线程中进行t1 线程等待
//            t2 就会等待 t1


            try {
                t1.join();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }

            for (int i = 0; i < 3; i++) {
                System.out.println("t2正在执行...");
            }
        });


        System.out.println("main 线程正在等待 t1 和 t2 的线程的执行... ");
        t1.start();
        t2.start();

        //        main线程 会等待 t1 和 t2 先执行
//          但是 t1 和 t2 之间是不存在 线程等待的
        t1.join();
        t2.join();

        System.out.println("main 线程 等待 t1 和 t2 的线程的执行结束！！！");


        // 表明 main 在前期会抢占更快
        for (int i = 0; i < 3; i++) {
            System.out.println("main 正在执行...");
        }




    }
}
